"""
@Author : 合肥一元数智教育科技有限公司
@Date :  2025/6/5 11:01
@Description : 
线程安全:
  多个线程并发执行时，同时操作了同一个资源，则会出现抢占资源问题，从而出现数据安全问题

解决方案:
   1. 添加线程锁

获取线程锁

"""
import threading
import time

"""
   1.非原子操作拆分‌
    count = temp + 1被拆分为三个非原子步骤：
    读取count值到temp
    计算temp + 1
    写回count这三个步骤可能被线程调度打断
    2.count += 1  # CPython解释器中对小整数是原子操作

"""

count = 0
# 获取线程锁
lock = threading.Lock()
def worker():
    # 使用线程锁
    # lock.acquire()
    with lock:
        global count
        temp = count
        time.sleep(0.001)
        count = temp + 1
    # 释放锁
    # lock.release()

if __name__ == "__main__":
    threads = []
    for i in range(200):
        t = threading.Thread(target=worker)
        threads.append(t)
        t.start()
    for thread in threads:
        thread.join()
    print(count)